home *** CD-ROM | disk | FTP | other *** search
- /* midasstr.h
- *
- * MIDAS stream library
- *
- * $Id: midasstr.h,v 1.5 1997/01/16 19:31:53 pekangas Exp $
- *
- * Copyright 1996,1997 Housemarque Inc.
- *
- * This file is part of the MIDAS Sound System, and may only be
- * used, modified and distributed under the terms of the MIDAS
- * Sound System license, LICENSE.TXT. By continuing to use,
- * modify or distribute this file you indicate that you have
- * read the license and understand and accept it fully.
- */
-
-
- #ifndef __midasstr_h
- #define __midasstr_h
-
-
- /* Hack for Linux: (FIXME) */
- #ifdef __LINUX__
- #include <pthread.h>
- #endif
-
- /****************************************************************************\
- * enum strStreamMode
- * ------------------
- * Description: Stream playing mode
- \****************************************************************************/
-
- enum strStreamMode
- {
- strStreamPlayFile = 1,
- strStreamCallback,
- strStreamPoll
- };
-
-
- /****************************************************************************\
- * struct strStream
- * ----------------
- * Description: Stream playing structure
- \****************************************************************************/
-
- typedef struct _strStream
- {
- unsigned sdChannel; /* channel number for the stream */
- uchar *buffer; /* pointer to stream buffer */
- unsigned bufferSamples; /* buffer length in samples */
- unsigned bufferBytes; /* buffer length in bytes */
- unsigned bufferWritePos; /* buffer write position */
- uchar *fileBuffer; /* file reading buffer */
- unsigned fileBufferBytes; /* file reading buffer size */
- unsigned sampleSize; /* size of one sample in bytes */
- int streamMode; /* see enum strStreamMode */
- fileHandle f; /* stream file handle */
- ulong fileLength; /* stream file length in bytes */
- ulong fileLeft; /* number of bytes left in file */
- int loop; /* 1 if the stream loops */
- volatile int threadExitFlag; /* thread exit flag */
- unsigned threadDelay; /* delay between polling in thread */
- void (CALLING *callback)(uchar *buffer, struct _strStream *stream);
- #ifdef __LINUX__
- pthread_t playerThread; /* player thread */
- #endif
- /* stream playing callback */
- uchar bufferClearVal; /* the value that should be used to
- clear the buffer */
- uchar filler[3];
- } strStream;
-
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
-
- /****************************************************************************\
- *
- * Function: int strInit(SoundDevice *SD)
- *
- * Description: Initializes the stream library
- *
- * Input: SoundDevice *SD Pointer to the Sound Device that will
- * be used for playing the streams
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING strInit(SoundDevice *SD);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int strClose(void)
- *
- * Description: Uninitializes the stream library
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING strClose(void);
-
-
-
- /****************************************************************************\
- *
- * Function: int strPlayStreamFile(unsigned channel, char *fileName,
- * unsigned sampleType, ulong sampleRate,
- * unsigned bufferLength, int loop, strStream **stream)
- *
- * Description: Starts playing a digital sound stream from a file. Creates a
- * new thread that will take care of reading the file and feeding
- * it to the stream buffer
- *
- * Input: unsigned channel channel number for the stream
- * char *fileName stream file name
- * unsigned sampleType stream sample type
- * ulong sampleRate sampling rate
- * unsigned bufferLength stream buffer length in milliseconds
- * int loop 1 if the stream should be looped,
- * 0 if not
- * strStream **stream pointer to stream state pointer
- *
- * Returns: MIDAS error code. Pointer to the stream state structure will
- * be written to *stream
- *
- \****************************************************************************/
-
- int CALLING strPlayStreamFile(unsigned channel, char *fileName,
- unsigned sampleType, ulong sampleRate, unsigned bufferLength, int loop,
- strStream **stream);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int strPlayStreamPolling(unsigned channel,
- * unsigned sampleType, ulong sampleRate,
- * unsigned bufferLength, strStream **stream)
- *
- * Description: Starts playing a stream in polling mode. Use
- * strFeedStreamData() to feed the stream data to the player
- *
- * Input: unsigned channel channel number for the stream
- * unsigned sampleType stream sample type
- * ulong sampleRate stream sampling rate
- * unsigned bufferLength stream buffer length in milliseconds
- * strStream **stream pointer to stream state pointer
- *
- * Returns: MIDAS error code. Pointer to the stream state structure will
- * be written to *stream
- *
- \****************************************************************************/
-
- int CALLING strPlayStreamPolling(unsigned channel, unsigned sampleType,
- ulong sampleRate, unsigned bufferLength, strStream **stream);
-
-
-
- /****************************************************************************\
- *
- * Function: int strPlayStreamCallback(unsigned sampleType,
- * ulong sampleRate, unsigned bufferBytes,
- * void (CALLING *callback)(uchar *buffer, strStream *stream))
- *
- * Description: Starts playing a stream with a callback.
- *
- * Input: unsigned sampleType stream sample type
- * ulong sampleRate stream sampling rate
- * unsigned bufferBytes stream buffer size _IN BYTES_
- * ... *callback stream player callback
- * strStream **stream pointer to stream state pointer
- *
- * Returns: MIDAS error code. Pointer to the stream state structure will
- * be written to *stream
- *
- * Notes: The callback function will be called each time the whole
- * stream buffer needs to be filled. It receives as an argument
- * a pointer to the buffer, and the stream state pointer.
- *
- * The function will be called from inside the mixing routine,
- * so it should return relatively rapidly - do not use this
- * function for, for example, loading data from disc.
- *
- \****************************************************************************/
-
- int CALLING strPlayStreamCallback(unsigned sampleType, ulong sampleRate,
- unsigned bufferBytes,
- void (CALLING *callback)(uchar *buffer, strStream *stream));
-
-
-
-
- /****************************************************************************\
- *
- * Function: int strStopStream(strStream *stream)
- *
- * Description: Stops playing a stream. This function will also destroy the
- * playback thread for stream file playback.
- *
- * Input: strStream *stream stream state pointer for the stream
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int CALLING strStopStream(strStream *stream);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int strFeedStreamData(strStream *stream, uchar *data,
- * unsigned numBytes, int feedAll, unsigned *numFed)
- *
- * Description: Feeds sample data to a stream that is being played in polling
- * mode.
- *
- * Input: strStream *stream stream state pointer from
- * strPlayStreamPolling()
- * uchar *data pointer to stream data
- * unsigned numBytes number of bytes of data to feed. Note!
- * This must be a multiple of the stream
- * sample size
- * int feedAll 1 if all data should be fed in all
- * circumstances. The function will block
- * the current thread if this flag is 1
- * until all data is fed.
- * unsigned *numFed pointer to a variable that will
- * contain the number of bytes actually
- * fed
- *
- * Returns: MIDAS error code. The number of bytes of data actually fed is
- * written to *numFed.
- *
- \****************************************************************************/
-
- int CALLING strFeedStreamData(strStream *stream, uchar *data,
- unsigned numBytes, int feedAll, unsigned *numFed);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int strSetStreamRate(strStream *stream, ulong sampleRate)
- *
- * Description: Changes the sampling rate for a stream
- *
- * Input: strStream *stream stream state pointer
- * ulong sampleRate new sampling rate in Hz
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING strSetStreamRate(strStream *stream, ulong sampleRate);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int strSetStreamVolume(strStream *stream, unsigned volume)
- *
- * Description: Changes the playback volume for a stream (the default is 64).
- *
- * Input: strStream *stream stream state pointer
- * unsigned volume new volume (0-64)
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int CALLING strSetStreamVolume(strStream *stream, unsigned volume);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int strSetStreamPanning(strStream *stream, int panning)
- *
- * Description: Changes the panning for a stream (the default is middle).
- *
- * Input: strStream *stream stream state pointer
- * int panning new panning position
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int CALLING strSetStreamPanning(strStream *stream, int panning);
-
-
-
- /****************************************************************************\
- *
- * Function: int strIsStreamFinished(strStream *stream, int *finished)
- *
- * Description: Checks whether a given stream has reached the end of the
- * stream file or not. Only applies to streams played from a
- * file.
- *
- * Input: strStream *stream stream state pointer
- * int *finished pointer to result variable
- *
- * Returns: MIDAS error code. If the stream is finished, 1 will be written
- * to *finished, otherwise *finished will contain 0.
- *
- \****************************************************************************/
-
- int CALLING strIsStreamFinished(strStream *stream, int *finished);
-
-
-
-
- #ifdef __cplusplus
- }
- #endif
-
-
- #endif /* #ifdef __midasstr_h */
-
-
- /*
- * $Log: midasstr.h,v $
- * Revision 1.5 1997/01/16 19:31:53 pekangas
- * Fixed to compile with Linux GCC (but do they work?)
- *
- * Revision 1.4 1997/01/16 18:41:59 pekangas
- * Changed copyright messages to Housemarque
- *
- * Revision 1.3 1997/01/16 18:25:08 pekangas
- * Implemented strSetStreamRate, strSetStreamVolume and strSetStreamPanning
- *
- * Revision 1.2 1996/09/28 06:39:46 jpaana
- * Converted from CR/LF and fixed some typos
- *
- * Revision 1.1 1996/09/22 23:17:48 pekangas
- * Initial revision
- *
- */
-